package request

import (
	"fmt"
	"time"
)

type Date time.Time

func (d *Date) UnmarshalJSON(b []byte) error {
	s := string(b)
	if s == `""` || s == `null` { // 空值处理
		return nil
	}
	// 解析带引号的字符串（如 "\"2024-11-07\""）
	t, err := time.Parse("\"2006-01-02 15:04:05\"", s)
	if err != nil {
		return fmt.Errorf("日期格式错误：必须是 2006-01-02 15:04:05")
	}
	*d = Date(t)
	return nil
}

type ShortLinkCreateReqDTO struct {
	Domain        string `json:"domain" binding:"required"`                                                                          // 域名（必填）
	OriginUrl     string `json:"originUrl" binding:"required,url"`                                                                   // 原始链接（必填且需为合法URL）
	Gid           string `json:"gid" binding:"required"`                                                                             // 分组标识（必填）
	CreatedType   uint8  `json:"createdType" binding:"required,oneof=0 1"`                                                           // 创建类型（0接口/1控制台）
	ValidDateType uint8  `json:"validDateType" binding:"required,oneof=0 1"`                                                         // 有效期类型（0永久/1自定义）
	ValidDate     Date   `json:"validDate" binding:"omitempty" time_format:"2006-01-02 15:04:05" time_utc:"0" time_location:"Local"` // 有效期（自定义时必填）
	Describe      string `json:"describe" binding:"omitempty,max=1024"`                                                              // 描述（最长1024字符）
}

type ShortLinkBatchCreateReqDTO struct {
	OriginUrls    []string `json:"originUrls" binding:"required"`     // 原始链接集合（必填）
	Describes     []string `json:"describes"`                         // 描述集合
	Gid           string   `json:"gid" binding:"required"`            // 分组标识（必填）
	CreatedType   uint8    `json:"createdType" binding:"oneof=0 1"`   // 创建类型（0接口/1控制台）
	ValidDateType uint8    `json:"validDateType" binding:"oneof=0 1"` // 有效期类型（0永久/1自定义）
	ValidDate     Date     `json:"validDate"`                         // 有效期（自定义格式）
}
type ShortLinkUpdateReqDTO struct {
	OriginUrl     string `json:"originUrl" binding:"required,url"`           // 原始链接（必填且需为合法URL）
	FullShortUrl  string `json:"fullShortUrl" binding:"required,url"`        // 完整短链接（必填且需为合法URL）
	OriginGid     string `json:"originGid" binding:"required"`               // 原始分组标识（必填）
	Gid           string `json:"gid" binding:"required"`                     // 分组标识（必填）
	ValidDateType uint8  `json:"validDateType" binding:"required,oneof=0 1"` // 有效期类型（0永久/1自定义）
	ValidDate     Date   `json:"validDate"`                                  // 有效期（自定义格式）
	Describe      string `json:"describe"`                                   // 描述（可选）
}
